package com.raowb.common.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import cn.hutool.core.collection.IterUtil;
import cn.hutool.core.lang.Editor;
import cn.hutool.core.util.ReflectUtil;

public class CollectionUtil extends cn.hutool.core.collection.CollectionUtil {

	/**
	 * 
	* @Title: convertType
	* @Description: 转换list 类型
	* @param collection
	* @param type
	* @return    设定文件
	* @return List<T>    返回类型
	* @throws
	 */
	@SuppressWarnings("rawtypes")
	public static <T> Collection<T> convertType(Collection collection, Class<T> type) {

		if (collection == null) {
			return null;
		}

		Collection<T> rtn = new ArrayList<>();
		for (Object object : collection) {
			rtn.add((T) object);
		}

		return rtn;
	}

	/**
	 * 
	* @Title: getFieldValues
	* @Description:
	* 获取给定Bean列表中指定字段名对应字段值的列表
	列表元素支持Bean与Map
	Parameters:
	collection - Bean集合或Map集合
	fieldName - 字段名或map的键
	type 返回集合类型
	Returns:
	字段值列表
	* @return List<T>    返回类型
	* @throws
	 */
	public static <T> List<T> getFieldValues(Iterable<?> collection, String fieldName, Class<T> type) {
		return (List<T>) convertType(getFieldValues(collection, fieldName,true), type);
	}
	
	/**
	 * 以 conjunction 为分隔符将集合元素属性值转换为字符串<br>
	 * 如果集合元素为数组、{@link Iterable}或{@link Iterator}，则递归组合其为字符串
	 * 
	 * @param <T> 集合元素类型
	 * @param iterable {@link Iterable}
	 *  @param field 字段
	 * @param conjunction 分隔符
	 * @return 连接后的字符串
	 * @see IterUtil#join(Iterable, CharSequence)
	 */
	public static String join(Iterable<?> collection, String field, CharSequence conjunction) {
		if(collection == null){
			return null;
		}
		List<String> list = getFieldValues(collection, field, String.class);
		return join(list,conjunction);
	}
}
